package itsm.isperp.framework.web.domain;

import itsm.isperp.framework.collection.tree.ITreeNode;
import itsm.isperp.framework.web.request.JqGridFilterRuleOp;
import itsm.isperp.module.dto.project.ProjectDomain;

/**
 * 统计查询器接口，通过添加查询条件可以一次性获取到各个条件下的数据数
 * 
 * 
 * @author lizx
 * @date 2013-8-13
 * 
 */
public interface CountQuery {

	/**
	 * 構造统计查询的sql语句
	 * 
	 * @return sql语句
	 */
	public String generatorCountQuerySql();

	/**
	 * 设置统计对象，数据库表名
	 * 
	 * @param from
	 *            数据库表名或者一个查询语句
	 * @return 返回统计器
	 */
	public CountQuery from(String from);

	/**
	 * 添加一个查询过滤
	 * 
	 * @param title
	 *            标题（key）
	 * @param filterSql
	 *            过滤语句
	 * @return 返回统计器
	 */
	public CountQuery addCountFilter(String title, String filterSql);

	/**
	 * 
	 * @param key
	 * @param main
	 * @param filterSql
	 * @return
	 */
	public CountQuery addCountFilter(String key, boolean main, String filterSql);

	/**
	 * 返回一个树形数组
	 * 
	 * @param rootName
	 *            根节点名称
	 * @return 树形数组
	 */
	public ITreeNode[] getTreeNodes(String rootName);

	/**
	 * 获取完整属性
	 * 
	 * @return
	 */
	public ITreeNode[] getTreeNodes();

	/**
	 * 根据key获取获取过滤语句
	 * 
	 * @param key
	 *            过滤条件的标识
	 * @return 过滤语句
	 */
	public String getFilter(String key);

	/**
	 * 获取过滤语句，此过滤语句包含所有的规律规则，并以or形式组合
	 * 
	 * @return 过滤语句
	 */
	public String getFilter();

	/**
	 * 获取过滤语句，此过滤语句包含所有的规律规则，并以or形式组合
	 * 
	 * @return 过滤语句
	 */
	public int getType();

	public Long getTreeNodeCount(String nodeName);

	public void setProjectDomain(ProjectDomain projectDomain);

	public void addQueryFilterRule(String field, JqGridFilterRuleOp op,
			String data);

	public String getFisrtQueryKey();

	public String getFrom();

	public void setFrom(String from);

	public boolean isFromRequest();

	public void setFromRequest(boolean fromRequest);
}
